今天要設定gitlab上的專案,讓他們能夠在git commit時自動打包成docker image並存放於gitlab registry。
目前gitlab上面都有提供許多shared runner,舉凡像是一些無關緊要、無機敏性考量的內容,都可以直接透過官方提供的shared runner 來進行pipeline,這次的homelab也會使用這個shared runner 進行auto build的動作。
反之,如果是一些private repository,有機敏性考量、有對應網路環境限制(如地端自動化佈署等等......),那就是透過sepcific runners於自己的機器中建置與維護專用的runner,符合當下環境的需求,且不用與陌生人競爭資源,安裝與註冊的流程上面&官網介紹的都算詳細,看大家如何選擇而已。
gitlab repository左邊選單 Settings > CI/CD > 展開 Runners,從圖片上我們可以看到許多shared runners,而runner下方許多藍色的tag則是告知你該runner的使用情境/環境。
下圖是官方所展示的gitlab runner execution flow
那如何觸發runner運作呢?就是要搭配.gitlab-ci.yml,當該檔案存在於gitlab repository且內容的撰寫符合官方所規範的方式,就可以觸發gitlab runner來工作啦。
那我這邊就是簡單的修改一下官方範本,撰寫一份.gitlab-ci.yml 如下,使用的是docker in docker(dind)的方式:
docker-build:
image: docker:latest
stage: build
services:
- docker:dind
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
script:
- |
if [[ "$CI_COMMIT_BRANCH" == "master" ]]; then
tag=":dev"
else
tag=":$CI_COMMIT_REF_NAME"
fi
- docker build -t "$CI_REGISTRY_IMAGE${tag}" .
- docker push "$CI_REGISTRY_IMAGE${tag}"
tags:
- docker
only:
- master
- /^Release-v[0-9]+(?:.[0-9]+)+$/
gitlab runner中其實預先定義了許多變數,與當下gitlab的使用者/repo/環境都息息相關,初學者不熟悉有哪些變數可以用的話不妨在runner中執行export將變數輸出看一看,或是花點時間認真閱讀官方文件看看有哪些是自己需要的。
.gitlab-ci.yml的內容可以搭配左邊選單CI/CD > pipeline > 畫面右上角CI Lint做檢驗。會告訴你語法是否正確,預計如何執行pipeline。
執行的過程,可以點選pipeline查看Console,那這邊的邏輯就是master主線會將image打包成dev 而/^Release-v[0-9]+(?:.[0-9]+)+$/
則是只要是這樣的名字就將image如此打包,如下圖所示。
那這樣子我前幾天寫的兩個應用都完成Auto Build囉,明天可以開始規劃基礎環境建設了。
gitlab官方的免費仔,在使用gitlab CI時是有Quota限制的,每個月只能執行400分鐘的pipeline(open source則不受限制),如果超過就需要升級會員或是購買額外時間(在user settings那邊有詳細的usage quotas可以參閱唷)。